#define _J_TIPKOVNICA_C_
#include "tipkovnica.h"

#include <arh/tipkovnica.h>
#include <arh/prekidi.h>
#include "tipovi.h"
#include "prekidi.h"
#include "razno.h"
#include "ispis.h"
#include "red.h"
#include "procesi.h"

static int j_tipka_red;

void j_tipkovnica_inicijaliziraj (bool prikazi_stisnuto)
{
	arh_tipkovnica_inicijaliziraj(prikazi_stisnuto);

	//postavi i omoguci prekid tipkovnice
	j_prekidi_postavi(PREKIDI_TIPKOVNICA, j_tipkovnica_prekidna_funkcija);
	arh_dozvoli_prekid_tipkovnice();
	
	j_tipka_red = j_dohvati_red(REDUI, SORT_PRP, 0);
}

static void j_tipkovnica_prekidna_funkcija (int param, void *kontekst)
{
	if (arh_tipkovnica_obradi_prekid() && j_tipka_red != -1)
		j_propusti_iz_reda(j_tipka_red, ISTINA);
}

//dohvati znak, rijec ili redak
int j_tipkovnica_dohvati (void *param)
{
	zahtjev_tipkovnici *pzt = param, zt;
	int povvr = 0;

	PARAMNULL(pzt);

	zt = *pzt;
	zt.ms = j_puj(j_aktivni_proces(), zt.ms);
	
	povvr = arh_tipkovnica_dohvati(&zt);
	
	if (povvr == 0 && pzt->cekaj && j_tipka_red != -1)
		j_stavi_u_red(j_tipka_red, NULL, NULL);
	
	return povvr;
}


